From: Jimi Xenidis Date: Thu, 14 Sep 2006 05:36:39 +0000 (-0400) Subject: [POWERPC][XEN] Inline clear_page() and use DCBZ to optimize X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15658^2~66 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=135926c75f0e2a259fe23a7467e3c2ce3843e2e7;p=xen.git [POWERPC][XEN] Inline clear_page() and use DCBZ to optimize Signed-off-by: Jimi Xenidis Signed-off-by: Hollis Blanchard --- diff --git a/xen/arch/powerpc/mm.c b/xen/arch/powerpc/mm.c index 46d6db2236..0172a6fb6f 100644 --- a/xen/arch/powerpc/mm.c +++ b/xen/arch/powerpc/mm.c @@ -209,16 +209,6 @@ long arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg) return -ENOSYS; } -void clear_page(void *page) -{ - if (on_mambo()) { - extern void *mambo_memset(void *,int ,__kernel_size_t); - mambo_memset(page, 0, PAGE_SIZE); - } else { - memset(page, 0, PAGE_SIZE); - } -} - extern void copy_page(void *dp, void *sp) { if (on_mambo()) { diff --git a/xen/include/asm-powerpc/page.h b/xen/include/asm-powerpc/page.h index f7951d44d3..f98d78d363 100644 --- a/xen/include/asm-powerpc/page.h +++ b/xen/include/asm-powerpc/page.h @@ -29,6 +29,7 @@ #include #include +#include #define PFN_DOWN(x) ((x) >> PAGE_SHIFT) #define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT) @@ -70,7 +71,23 @@ typedef struct { unsigned long l1_lo; } l1_pgentry_t; #define pfn_to_paddr(pfn) ((paddr_t)(pfn) << PAGE_SHIFT) #define paddr_to_pfn(pa) ((unsigned long)((pa) >> PAGE_SHIFT)) -extern void clear_page(void *p); +static __inline__ void clear_page(void *addr) +{ + unsigned long lines, line_size; + + line_size = cpu_caches.dline_size; + lines = cpu_caches.dlines_per_page; + + __asm__ __volatile__( + "mtctr %1 # clear_page\n\ +1: dcbz 0,%0\n\ + add %0,%0,%3\n\ + bdnz+ 1b" + : "=r" (addr) + : "r" (lines), "0" (addr), "r" (line_size) + : "ctr", "memory"); +} + extern void copy_page(void *dp, void *sp); #define linear_pg_table linear_l1_table